#include <fstream>

#include "Tester.h"

using namespace std;

Tester::Tester()
{
}

bool Tester::testear(GeneradorDeTriangulosRectangulosConAlturaDos &generador, const char nombreArchivoSalida[]) const
{
	ofstream salida(nombreArchivoSalida);
	
	if(salida)
	{
		salida << "Area";
		salida << "\tArea H\tArea DF\tArea DFR";
		salida << "\tError Heron\tError DF\tError DFR" << endl;
		
		generador.iniciar();
		
		while(generador.hayMasTriangulos())
		{
			TrianguloRectanguloConAlturaDos triangulo(generador.generarTriangulo());
			
			Float area(triangulo.area());
			Float areaHeron(triangulo.areaHeron());
			Float areaDiferenciasFaciales(triangulo.areaDiferenciasFaciales());
			Float areaDiferenciasFacialesRevisado(triangulo.areaDiferenciasFacialesRevisado());
			
			salida << area << "\t";
			
			salida << areaHeron << "\t";
			salida << areaDiferenciasFaciales << "\t";
			salida << areaDiferenciasFacialesRevisado << "\t";
			
			salida << this->errorRelativo(area, areaHeron) << "\t";
			salida << this->errorRelativo(area, areaDiferenciasFaciales) << "\t";
			salida << this->errorRelativo(area, areaDiferenciasFacialesRevisado) << endl;
			
			generador.siguiente();
		}
	}
	else
	{	
		return false;
	}
	
	return true;
}

Float Tester::errorRelativo(const Float &valorReal, const Float &valorMedicion) const
{
	if(valorReal + valorReal != valorReal)
	{
		return (valorReal - valorMedicion) / valorReal;
	}
	else
	{
		return valorMedicion;
	}
}

